package autopecas.Dados;

import autopecas.ClasseBasica.Cliente;
import autopecas.ClasseBasica.Veiculo;
import autopecas.Exception.ClienteException;
import autopecas.Interface.InterfaceCliente;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author NeGo
 */
public class DadosCliente extends DadosConexao implements InterfaceCliente {

    DadosConexao dados;

    public DadosCliente(){
        dados = new DadosConexao();
    }
    
    @Override

        /**
     * Metodo para Cadastrar dados do Cliente inserindo no banco de dados .
     * @param texto texto para  cadastrar
     * @return true se a strong so conter  cadastro de Nome e Cpf, false se conter outro dado
     * @throws java.sql.SQLException - Erros retomados pelo banco
     */
    public void cadastrar(Cliente cliente) throws SQLException, ClienteException {

        String sql = "INSERT INTO CLIENTE (NOME,CPF) VALUES ( ?,? )";
        PreparedStatement stmt = dados.conectarMysql().prepareStatement(sql);
        stmt.setString(1, cliente.getNome());
        stmt.setLong(2, cliente.getCpf());
        stmt.execute();

    }

    @Override
    
        /**
     * Metodo para atualizacao dados do Cliente  buscando pelo cpf e alterando no banco de dados .
     * @param texto texto para  atualizar
     * @return true se a strong so conter  atualizar peo Cpf, false se nao conter cpf nao será realizado
     * @throws java.sql.SQLException - Erros retomados pelo banco
     */
    
    public void atualizar(Cliente cliente) throws SQLException, ClienteException {

        String sql = "UPDATE  CLIENTE  SET NOME = ? where CPF = ?";
        PreparedStatement stmt = dados.conectarMysql().prepareStatement(sql);
        stmt.setString(1, cliente.getNome());
        stmt.setLong(2, cliente.getCpf());
        stmt.execute();

    }

    @Override
        /**
     * Metodo para Remover dados do Cliente retirando do banco de dados onde também é necessario a exclusao do veiculo .
     * @param texto texto para  Remover
     * @return true se a strong se remover o cliente, false se nao ocorrer a remocao dado
     * @throws java.sql.SQLException - Erros retomados pelo banco
     */
    public void remover(Cliente cliente) throws SQLException, ClienteException {
        String sql = "DELETE FROM VEICULO WHERE cpfCliente = ?";
        PreparedStatement stmt = dados.conectarMysql().prepareStatement(sql);
        stmt.setLong(1, cliente.getCpf());
        stmt.execute();

        sql = "DELETE FROM CLIENTE WHERE CPF = ?";
        stmt = dados.conectarMysql().prepareStatement(sql);
        stmt.setLong(1, cliente.getCpf());
        stmt.execute();
    }
    

    @Override

        /**
     * Metodo para Listar dados do Cliente buscando no banco de dados .
     * @param texto texto para  Listar as informacoes do cliente.
     * @return true se a strong so conter a lista dos dados, false se nao conter outro dado
     * @throws java.sql.SQLException - Erros retomados pelo banco
     */
    public ArrayList<Cliente> Listar() throws SQLException, ClienteException {
        ArrayList<Cliente> list = new ArrayList<>();
        String sql = "SELECT * FROM CLIENTE";
        PreparedStatement stmt = dados.conectarMysql().prepareStatement(sql);
        ResultSet resultado = stmt.executeQuery();

        while (resultado.next()) {
            Cliente cliente = new Cliente(resultado.getString("nome"), resultado.getLong("cpf"), new ArrayList<Veiculo>());
            list.add(cliente);
        }
        return list;

    }

    @Override
        /**
     * Metodo para Consultar dados do Cliente da qual realiza a busca pelo cpf do cliente no banco de dados .
     * @param texto texto para  Consultar
     * @return true se a strong se encontrar o cpf do cliente , false se  nao conter outro dado
     * @throws java.sql.SQLException - Erros retomados pelo banco
     */
    
    public ArrayList<Cliente> Consultar(Integer cpf) throws SQLException, ClienteException {

        ArrayList<Cliente> list = new ArrayList<>();

        String sql = "SELECT * FROM CLIENTE WHERE CPF = ?";
        PreparedStatement stmt = dados.conectarMysql().prepareStatement(sql);
        stmt.setInt(1, cpf);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            Cliente cliente = new Cliente(rs.getString("nome"), rs.getLong("cpf"), new ArrayList<Veiculo>());
            list.add(cliente);

        }
        return list;

    }


    
}
